#include "metodosnum.h"

bool MetNum::FatoracaoLU(vector< vector<double> > _A)
{
	vector <int> tamanho;
	double somat=0.0;
	tamanho = SizeMatriz(_A);
	L =InicializaMatriz(tamanho.at(0),tamanho.at(1));
	U =InicializaMatriz(tamanho.at(0),tamanho.at(1));

	for (int i = 1 ; i <=tamanho.at(0);i++)
	{
		for (int j=i;j<=tamanho.at(0);j++)
		{
			somat = 0.0;
			if ((i-1) >= 1)
			{
				for (int k = 1 ; k <=(i-1); k++ ) 
				{
					somat+=(L[i-1][k-1]*U[k-1][j-1]);
				}
			}
			
			U[i-1][j-1]=_A[i-1][j-1] - somat; 
			
		}
		for (int j=(i+1);j<=tamanho.at(0);j++)
		{
			somat =0.0;
			if ((i-1) >= 1)
			{
				for (int k = 1 ; k <=(i-1); k++ ) 
				{
					somat+=L[j-1][k-1]*U[k-1][i-1];
				}
			}
			L[j-1][i-1] = (_A[j-1][i-1]-somat)/U[i-1][i-1];
		}
	
	}
	for (int i = 0 ; i <tamanho.at(0);i++)
	{
		L[i][i]= 1.0;
	}
	//ImprimeMatriz(L);
	//ImprimeMatriz(U);
	
	return true; 
}